#include <iostream>

/*
C和C++使用&来表示变量的地址，但是C++中，&符号也用来申明引用。
int rats;
int & cats = rats;
它们可以互换，它们指向相同的值和指针
*/

//引用和指针的不同之处是：引用必须在创建的时候初始化它，而指针可以先创建，后赋值
// int & b = a;
// int * const c = &a;
//上面俩行是相同的


/*
尽可能将引用的形参设置成const
值传递参数（值拷贝）、引用参数、指针参数
如果参数较大，引用参数很有用
*/

double refcube(double &a)  //参数非const引用，如果实参与引用参数不匹配，直接报错
{
    return a*a*a;
}
double refcube2(const double &a)  //实参与引用参数不匹配，c++将会生成临时变量，当且仅当参数为const引用
{
    return a*a*a;
}
int main(){
    using namespace std;
    double a = 3.0;
    
    //cout << refcube(a + 3.0) << endl;
    cout << refcube2(a + 3.0) << endl; //实参与引用参数不匹配，会生成一个临时变量
    return 0;
}